package imsdk

import (
	"encoding/json"
	"longmen/server/config/global"
	"longmen/server/pkg/common/helper/http"
)

type (
	CreteGroupResponse struct {
		ActionStatus string `json:"ActionStatus"`
		ErrorInfo    string `json:"ErrorInfo"`
		ErrorCode    int    `json:"ErrorCode"`
		GroupID      string `json:"GroupId"`
	}
	CreateGroupRequest struct {
		OwnerAccount string `json:"Owner_Account"` // 群主的 SenderUid（选填）
		Type         string `json:"Type"`          // 群组类型：Private/Public/ChatRoom/Community(不支持AVChatRoom)（必填）
		GroupID      string `json:"GroupId"`       // 用户自定义群组 ID（选填）
		Name         string `json:"Name"`          // 群名称（必填）
		//Introduction    string     `json:"Introduction"`    // 群简介（选填）
		//Notification    string     `json:"Notification"`    // 群公告（选填）
		//FaceURL         string     `json:"FaceUrl"`         // 群头像 URL（选填）
		//MaxMemberCount  int        `json:"MaxMemberCount"`  // 最大群成员数量（选填）
		ApplyJoinOption string `json:"ApplyJoinOption"` // 申请加群处理方式（选填）
		//AppDefinedData  []struct { // 群组维度的自定义字段（选填）
		//	Key   string `json:"Key"`   // App 自定义的字段 Key
		//	Value string `json:"Value"` // 自定义字段的值  自定义字段支持二进制数据
		//} `json:"AppDefinedData"`
		//MemberList []struct { // 初始群成员列表，最多100个（选填）
		//	MemberAccount        string     `json:"Member_Account"` // 成员（必填）
		//	Role                 string     `json:"Role,omitempty"` // 赋予该成员的身份，目前备选项只有 Admin（选填）
		//	AppMemberDefinedData []struct { // 群成员维度自定义字段（选填）
		//		Key   string `json:"Key"`   // 群成员维度自定义的 Key
		//		Value string `json:"Value"` // 群成员维度自定义字段值
		//	} `json:"AppMemberDefinedData"`
		//} `json:"MemberList"`
	}
	CreateFansGroupRequest struct {
		OwnerAccount string `json:"Owner_Account"` // 群主的 SenderUid（选填）
		Type         string `json:"Type"`          // 群组类型：Private/Public/ChatRoom/Community(不支持AVChatRoom)（必填）
		GroupID      string `json:"GroupId"`       // 用户自定义群组 ID（选填）
		Name         string `json:"Name"`          // 群名称（必填）
	}
)

// CreateGroup 创建群
func (s sdk) CreateGroup(req CreateGroupRequest) bool {
	req.Type = "AVChatRoom"
	req.ApplyJoinOption = "FreeAccess"
	reqUrl := s.BuildRestfulUrl("/group_open_http_svc/create_group")
	bytes, err := json.Marshal(req)
	if err != nil {
		global.Log.Error("create group error: ", err)
		return false
	}

	result, err := http.HttpPost(reqUrl, string(bytes), connTimeoutMs, serveTimeoutMs, "application/json")
	if err != nil {
		global.Log.Error("create group error: ", err)
		return false
	}
	resp := CreteGroupResponse{}
	err = json.Unmarshal(result, &resp)
	if err != nil {
		global.Log.Error("create group Unmarshal error: ", err)
		return false
	}
	if resp.ErrorCode == 10021 {
		global.Log.Errorf("create group[%s]: %s", req.GroupID, resp.ErrorInfo)
		// 群已创建
		return true
	}
	if resp.ActionStatus == FailActionStatus {
		global.Log.Errorf("create group  req:%s  resp: %s", string(bytes), string(result))
		return false
	}
	return true
}

// CreateFansGroup 创建粉丝群
func (s sdk) CreateFansGroup(req CreateFansGroupRequest) bool {
	req.Type = "Private" // 私有群
	reqUrl := s.BuildRestfulUrl("/group_open_http_svc/create_group")
	bytes, err := json.Marshal(req)
	if err != nil {
		global.Log.Error("create group error: ", err)
		return false
	}

	result, err := http.HttpPost(reqUrl, string(bytes), connTimeoutMs, serveTimeoutMs, "application/json")
	if err != nil {
		global.Log.Error("create group error: ", err)
		return false
	}
	resp := CreteGroupResponse{}
	err = json.Unmarshal(result, &resp)
	if err != nil {
		global.Log.Error("create group Unmarshal error: ", err)
		return false
	}
	if resp.ErrorCode == 10021 {
		global.Log.Errorf("create group[%s]: %s", req.GroupID, resp.ErrorInfo)
		// 群已创建
		return true
	}
	if resp.ActionStatus == FailActionStatus {
		global.Log.Errorf("create group  req:%s  resp: %s", string(bytes), string(result))
		return false
	}
	return true
}
